import axios from 'axios'
import { getToken } from '../common/TokenStore'

export const baseURL = process.env.VUE_APP_TARGET //配置服务器地址
const axiosServer = axios.create({
	baseURL,
	timeout: 3000,
	// withCredentials: true // default 表示跨域请求时是否需要使用凭证
})
/**
 * axios请求拦截器
 *   判断 token 是否存在，如果已经登录成功，token会被持久存储
 *    如果存在，设置到authorization请求头,服务端会通过authorization判断本次请求是否合法
 *
 */
axiosServer.interceptors.request.use(
	config => {
		let token = getToken()
		if (token) {
			// 2. 设置到authorization请求头
			config.headers.common['authorization'] = token
		}
		return config
	},
	error => {
		return Promise.reject(error)
	}
)

/**
 * axios响应拦截器
 *   作用: 所有网络请求响应都到这来处理
 *       1. 过滤响应数据
 *           response.data
 *       2. 响应错误处理
 *
 */
axiosServer.interceptors.response.use(
	function (response) {
		// 对响应数据做点什么
		return response.data
	},
	function (error) {
		// 对响应错误做点什么
		switch (error.response.status) {
			case 404:
			case 401:
			case 400:
				alert('客户端请求有语法错误，不能被服务器所理解')
				break
			case 403:
				alert('权限不足,请联系管理员!')
			case 504:
			case 505:
			case 500:
				alert('服务器发生不可预期的错误')
				break
			default:
				alert('未知错误!')
		}
		return Promise.reject(error)
	}
)
export default axiosServer
